abstract class Data {
    abstract public void DisplayValue();
}

class Integer extends  Data {
    int value;

    Integer() {
        value=100;
    }

    public void DisplayValue(){
        System.out.println (value);
    }
}

class Double extends Data{
    double value;

    Double(){
        value=100;
    }
    public void DisplayValue(){
        System.out.println(value);
    }
}

class Boolean extends Data{
    boolean value;

    Boolean(){
        value=(100 == 100);
    }
    public void DisplayValue(){
        System.out.println(value);
    }
}

// Pattern Classes
abstract class Factory {
    abstract public Data CreateDataObject();
}

class IntFactory extends Factory {
    public Data CreateDataObject(){
        return new Integer();
    }
}

class DoubleFactory extends Factory{
    public Data CreateDataObject(){
        return new Double();
    }
}

class BooleanFactory extends Factory{
    public Data CreateDataObject(){
        return new Boolean();
    }
}

////Client classes
class Document {
    Data pd;
    Document(Factory pf){
        pd = pf.CreateDataObject();
    }
    public void DisplayData(){
        pd.DisplayValue();
    }
}

public class MyDoc {
    static Document d,e,f;
    public static void main(String[] args) {
        d = new Document(new DoubleFactory());
        d.DisplayData();
        e = new Document(new IntFactory());
        e.DisplayData();
        f = new Document(new BooleanFactory());
        f.DisplayData();

    }
}